#pragma once

#include <string>
#include <vector>
#include "student.h"
#include <map>
#include <iostream>

class FileHandler
{
public:
    // 保存学生信息到文件
    bool saveStudentsToFile(const std::vector<Student> &students, const std::string &filename);

    // 从文件加载学生信息
    bool loadStudentsFromFile(std::vector<Student> &students, const std::string &filename);

    // 保存用户认证信息到文件
    bool saveUsersToFile(const std::map<std::string, std::string> &users, const std::string &filename);

    // 从文件加载用户认证信息
    bool loadUsersFromFile(std::map<std::string, std::string> &users, const std::string &filename);

    // 根据用户身份存储不同的数据文件（可选）
    std::string getFilePath(const std::string &username, const std::string &role);

private:
    // 处理文件路径和名称
    std::string constructFilePath(const std::string &baseName, const std::string &role);
};

/*
saveStudentsToFile：将学生信息保存到指定文件，接收学生信息容器和文件名作为参数，返回布尔值表示操作是否成功。
loadStudentsFromFile：从指定文件加载学生信息，接收学生信息容器和文件名作为参数，返回布尔值表示操作是否成功。
saveUsersToFile：将用户认证信息保存到指定文件，接收用户信息映射和文件名作为参数，返回布尔值表示操作是否成功。
loadUsersFromFile：从指定文件加载用户认证信息，接收用户信息映射和文件名作为参数，返回布尔值表示操作是否成功。
getFilePath：根据用户身份获取相应的数据文件路径，接收用户名和用户角色作为参数，返回文件路径字符串。
constructFilePath：构造文件路径的辅助函数，用于生成基于用户角色的文件路径。
*/